package com.foreveross.proxyip.infra.conf;

import java.lang.reflect.Field;
import java.util.Iterator;

import javax.persistence.Column;
import javax.persistence.Table;

import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;

import com.foreveross.proxyip.infra.base.ddd.domain.IBaseEntity;



/**
 * 功能描述：根据实体类得到对应的表名、主键名、字段名工具类
 * @author lyq
 *
 */
public class HibernateConfigurationHelper {

 private static Configuration hibernateConf;

// @SuppressWarnings("deprecation")
//private static Configuration getHibernateConf() {
//  if (hibernateConf == null) {
//   return  new AnnotationConfiguration ();   
//  }
//  return hibernateConf;
// }
//
// @SuppressWarnings("rawtypes")
//private static PersistentClass getPersistentClass(Class clazz) {
//  synchronized (HibernateConfigurationHelper.class) {
//   PersistentClass pc = getHibernateConf().getClassMapping(
//     clazz.getName());
//   if (pc == null) {
//    hibernateConf = getHibernateConf().addClass(clazz);
//    pc = getHibernateConf().getClassMapping(clazz.getName());
//   }
//   return pc;
//  }
// }
 


 /**
  * 功能描述：获取实体对应的表名
  * 
  * @param clazz
  *            实体类
  * @return 表名
  */
 @SuppressWarnings({ "rawtypes", "unchecked" })
public static  String getTableName(Class clazz) {
	 Table a =   (Table) clazz.getAnnotation(javax.persistence.Table.class);
  return a.name();
 }

// /**
//  * 功能描述：获取实体对应表的主键字段名称
//  * 
//  * @param clazz
//  *            实体类
//  * @return 主键字段名称
//  */
// @SuppressWarnings("rawtypes")
//public static String getPkColumnName(Class clazz) {
//
//  return getPersistentClass(clazz).getTable().getPrimaryKey()
//    .getColumn(0).getName();
//
// }

 /**
  * 功能描述：通过实体类和属性，获取实体类属性对应的表字段名称
  * 
  * @param clazz
  *            实体类
  * @param propertyName
  *            属性名称
  * @return 字段名称
 * @throws Exception 
 * @throws SecurityException 
  */
 @SuppressWarnings("rawtypes")
public static String getColumnName(Class clazz, String propertyName) throws  Exception {
	Field field = clazz.getDeclaredField(propertyName);
	Column colatt = field.getAnnotation(javax.persistence.Column.class);
  if(colatt==null){
	  return field.getName();
  }else{
	  return colatt.name();
  }
 }

}

